ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド
リリース7.0
E05164-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

XLAでレコードをトランザクション・ログから読み取る方法

アプリケーションによってTimesTenデータ・ストアが変更されると、TimesTenは、データ・ストアおよびトランザクション・コミットなどの他のイベントに対して行われた変更を示すログ・レコードを生成します。

新しいログ・レコードは、生成されると常にログ・バッファの最後に書き込まれます。

TimesTenでディスク・ベースのロギングが有効になっている場合は、メモリー内のログ・バッファからディスク上のログ・ファイルに、ログ・レコードが定期的にバッチでフラッシュされます。XLAが永続モードで初期化されている場合、XLAアプリケーションでディスクまたはメモリーに存在するログの一部に接続する必要はありません。したがって、この章で使用する「トランザクション・ログ」という用語は、トランザクション更新レコードの仮想ソースを指します。これらのレコードが物理的にメモリーに保存されているか、ディスクに保存されているかは関係ありません。

アプリケーションで、XLAを使用し、TimesTenデータ・ストアへの変更に関してトランザクション・ログを監視できます。XLAは、トランザクション・ログ全体を読み取り、ログ・レコードをフィルタ処理し、目的の表および列への変更が含まれているトランザクション・レコードのリストをXLAアプリケーションに配信します。

XLAは、レコードをディスクリート・トランザクションにソートします。複数のアプリケーションが同時にデータ・ストアを更新している場合、異なるアプリケーションのログ・レコードがログに交互配置されます。

XLAは、特定のトランザクションに関連するすべてのログ・レコードを透過的に抽出し、それらを連続するリストにしてアプリケーションに配信します。

コミット済のトランザクションのレコードのみが返されます。コミット済のレコードは、最後のコミット・レコードがトランザクション・ログに書き込まれる順序で返されます。コミットされていないデータ・ストアへの変更に関連するレコードは、XLAによってフィルタ処理されます。

変更が行われ、その後にロールバックされた場合、強制終了されたトランザクションのレコードはアプリケーションに配信されません。

これらのXLAの基本概念のほぼすべてを例3.1に示し、次にそれぞれの内容を箇条書きで示します。

例3.1

図3.1に示すトランザクション・ログを例として考えてみます。

図3.1 トランザクション・ログから抽出されるレコード
トランザクション・ログから抽出されるレコード[説明]

この例では、トランザクション・ログに次のレコードが含まれています。

CT1 - アプリケーションCは、表Wの行1を値7.7で更新

BT1 - アプリケーションBは、表Xの行3を値2で更新

CT2 - アプリケーションCは、表Wの行9を値5.6で更新

BT2 - アプリケーションBは、表Yの行2を値XYZで更新

AT1 - アプリケーションAは、表Zの行1を値3で更新

AT2 - アプリケーションAは、表Zの行3を値4で更新

BT3 - アプリケーションBがトランザクションをコミット

AT3 - アプリケーションAがトランザクションをロールバック

CT3 - アプリケーションCがトランザクションをコミット

表W、YおよびZへの変更を検出するように設定されているXLAアプリケーションでは次のようになります。

BT2およびBT3 - 表Yの行2を値XYZで更新し、コミット

CT1 - 表Wの行1を値7.7で更新

CT2およびCT3 - 表Wの行9を値5.6で更新し、コミット

この例では、次のことが示されています。